使用Maven编译Java项目

您所在的位置:网站首页 javac 命令依赖使用maven 使用Maven编译Java项目

使用Maven编译Java项目

2023-09-18 11:19| 来源: 网络整理| 查看: 265

本文带你用Maven编译一个简单的Java项目。

本文目标

创建一个简单的Java项目,然后用Maven编译。

你需要 15分钟左右文本编辑器或者IDEJDK 8+ 创建项目

我们首先需要创建项目一个Java项目。为了专注于Maven的操作,这个Java项目越简单越好。

创建文件夹结构

在你选择的项目文件夹下面,创建子文件夹。 Windows系统的话,在命令行运行命令 :

mkdir src\main\java\hello

*nix系统的话,在运行命令 :

mkdir -p src/main/java/hello

最后文件夹结构如下:

└── src └── main └── java └── hello

在src/main/java/hello文件夹下面,你可以按自己的想法创建任何Java类。为了简单起见,我们只创建两个类:HelloWorld.java和Greeter.java。

package hello; public class HelloWorld { public static void main(String[] args) { Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); } } package hello; public class Greeter { public String sayHello(){ return "Hello world!"; } } 安装Maven

现在你已经有一个可以编译的项目了,接下来我们开始安装Maven。 你可以从https://maven.apache.org/download.cgi上面下载Maven的二进制文件。我们只需要二进制文件,可以直接去找apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz文件来下载(例如apache-maven-3.6.3-bin.zip)。

下载下来之后,解压压缩包,然后把里面的bin文件夹添加到你的电脑的 高级系统设置 => 环境变量 => 系统变量 => path 里面。

为了测试Maven是否安装成功,用命令行运行命令:

mvn -v

如果安装成功,可以看到Maven的安装和环境信息如下(版本号可能不同):

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\Program Files\Maven\apache-maven-3.6.3\bin\.. Java version: 1.8.0_231, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_231\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

这样Maven就安装成功了。

定义一个简单的Maven配置文件

Maven安装成功之后,我们就可以定义一个Maven项目配置文件了。Maven项目都会定义一个XML文件:pom.xml。这个文件提供了项目的名称、版本和外部库的依赖。

在项目根目录新建一个pom.xml文件,文件内容如下:

4.0.0 com.hansy learn-maven jar 0.1.0 1.8 1.8 org.apache.maven.plugins maven-shade-plugin 2.1 package shade hello.HelloWorld

除去可选的 元素,这已经是编译一个Java项目所需要的最简单的pom.xml文件了。它包含了如下的项目配置元素:

。POM模型版本(Maven2和3一直是4.0.0)。这个项目所属的分组或机构。经常表示为一个反向的域名。。项目的名称(例如:JAR或者 WAR文件的名字)。。项目的版本。。项目打包的方式。默认是"jar",将会打包成JAR文件。设置成"war"的话,将会打包成WAR文件。

现在,我们完成了一个最小的,但是能够用Maven编译的项目。

编译Java代码

Maven已经准备好编译项目了。你现在可以用Maven执行多种编译流程目标,包括:

compile:编译项目源码package:生成一个库包(比如一个JAR文件)install:安装生成的库包到本地的Maven依赖仓库

为了编译源码,运行如下命令:

mvn compile

这个命令会运行Maven,执行编译操作。执行完成之后,你会在target/classes文件夹里面找打编译好的*.class* 文件。

因为一般不会直接发布或者使用*.class*文件,你可能直接运行打包操作:

mvn package

打包命令的具体操作:编译Java源码,运行所有的测试,最后在 target 文件夹里面把编译好的字节码打包成JAR文件。JAR文件的文件名基于pom.xml文件里面的和。你的pom.xml如果跟上面的一样的话,生成出来的JAR文件的文件名将会是learn-maven-0.1.0.jar。

执行JAR文件:

java -jar target/learn-maven-0.1.0.jar

为了快速访问项目依赖,Maven维护着一个本地依赖仓库(默认在用户文件夹的 .m2/repository 下面)。如果你想把项目的JAR包安装到本地仓库里面,你可以运行安装命令:

mvn install

安装命令的具体流程:编译,测试,打包,最后把打包好的项目复制到本地仓库。这样你的项目就可以提供给本地的其他项目作为依赖使用了。

提到依赖,接下来会说明一下怎么在Maven配置文件里面声明依赖。

声明依赖

我们刚才创建的Hello World项目是完全自包含的,没有依赖额外的类库。但是,大部分的应用,都会使用外部的类库,来处理一些简单的或者复杂的功能。

比如说,我们除了输出"Hello World!",还想打印出当前日期和时间。Java自带的日期和时间工具库可以这个要求,但是你也可以使用一个外部的Joda Time库来实现这个功能。

首先,修改 HelloWorld.java:

package hello; import org.joda.time.LocalTime; public class HelloWorld { public static void main(String[] args) { LocalTime currentTime = new LocalTime(); System.out.println("The current local time is:" + currentTime); Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); } }

我们在HelloWorld类里面,使用Joda Time的LocalTime类来获取和打印当前时间。

如果我们现在运行 mvn compile 命令,编译过程会失败(提示错误:程序包org.joda.time不存在),因为你还没有声明Joda Time库作为一个编译时的依赖。

你需要在pom.xml里面添加如下内容(在元素下面):

joda-time joda-time 2.9.2

这个XML代码块声明了项目的依赖列表。本项目只声明了一个Joda Time的依赖。在元素里面,一个依赖由如下三个子元素确定:

。依赖所属的分组或机构。。依赖的库名。。依赖库的版本。

默认的情况下,所有的依赖的作用域都是“compile”。也就是,依赖必须在编译时可用(如果打包成WAR文件的话,依赖的类库会包含在WAR包的*/WEB-INF/libs*文件夹下面)。

此外,你还可能用到如下的两个作用域:

provided :在编译的时候需要该依赖,但是运行时由执行程序的容器来提供该依赖(例如:Java Servlet API)。test :在编译和测试的时候需要该依赖,但是打包和运行的时候就不要这个依赖了。

现在再运行mvn compile或者mvn package命令,Maven都可以从Maven Central仓库中获取到 Joda Time依赖了。

写一个测试

首先,在pom.xml文件里面添加JUnit和hamcrest库的依赖,作用域设置为test:

junit junit 4.12 test org.hamcrest hamcrest-library 2.2 test

然后创建一个测试用例如下:

src/test/java/hello/GreeterTest.java

package hello; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.*; import org.junit.Test; public class GreeterTest { private Greeter greeter = new Greeter(); @Test public void greeterSaysHello() { assertThat(greeter.sayHello(), containsString("Hello")); } }

Maven使用一个叫做“surefire”的插件来运行单元测试。这个插件默认会编译并运行src/test/java文件夹下面所有的文件名以Test结尾的类文件。你可以运行如下命令执行测试:

mvn test

显示结果如下:

...... ------------------------------------------------------- T E S T S ------------------------------------------------------- Running hello.GreeterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.065 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.826 s [INFO] Finished at: 2020-07-14T16:57:19+08:00 [INFO] ------------------------------------------------------------------------

或者也可以像上面那样直接使用 mvn install 命令(因为安装流程中包含着测试流程)。

最终的pom.xml文件如下:

4.0.0 com.hansy learn-maven jar 0.1.0 1.8 1.8 joda-time joda-time 2.9.2 junit junit 4.12 test org.hamcrest hamcrest-library 2.2 test org.apache.maven.plugins maven-shade-plugin 2.1 package shade hello.HelloWorld

pom.xml文件中使用了maven-shade-plugin插件,这个插件使我们可以简单便捷的生成可执行的JAR文件。

小结

你已经创建了一个简单但是有效的Maven编译配置文件,可以正常的编译Java项目了。

源码下载

learn-maven

参考资料

https://spring.io/guides/gs/maven/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3